//创建服务器
const express=require('express')
const cors=require('cors')
const joi = require('joi')
const app=express()
const config=require('./config')
// 解析 token 的中间件
const expressJWT = require('express-jwt')
app.use(cors())//解决跨域问题
app.use(express.urlencoded({ extended: false }))
//使用中间件来优化失败的提示消息
app.use((req,res,next)=>{
    res.cc=(err,status=1)=>{
        res.send({
            status,
            // 状态描述，判断 err 是 错误对象 还是 字符串
            message: err instanceof Error ? err.message : err,
          })
    }
    next()
})

// 使用 .unless({ path: [/^\/api\//] }) 指定哪些接口不需要进行 Token 的身份认证,api开头的不需要鉴权
app.use(expressJWT({ secret: config.jwtSecretKey,algorithms:['HS256'] }).unless({ path: [/^\/api\//] }))
//【如果其他接口，有与api开头，发送请求的时候就需要携带token】
// 导入路由模块，并挂载
const userrouter=require('./router/user.js')
app.use('/api',userrouter)
//导入用户中心模块路由 并挂载
const userinforouter=require('./router/userinfo')
app.use('/my',userinforouter)
//文章管理的路由
const artcaterouter=require('./router/artcate')
app.use('/my/article',artcaterouter)
// 错误中间件
app.use(function (err, req, res, next) {
    // 数据验证失败
    if (err instanceof joi.ValidationError) return res.cc(err)
    // 捕获身份认证失败的错误
  if (err.name === 'UnauthorizedError') return res.cc('身份认证失败！')
    // 未知错误
    // res.cc(err)
  })
app.listen(8081,()=>{
    console.log('http://127.0.0.1:8081');
})

